package presenteurs
import java.util.Random
import scala.util.Random
import collection.mutable.ListBuffer


/**
 * Classe permettant de gérer la présentation du process explorer
 */
class MainPresenteur {

  /**
   * Liste des processus en cours d'exécution dans le système
   */
  private var mListProcess:ListBuffer[domaine.ProcessStatus]=
    new ListBuffer[domaine.ProcessStatus]
  
  /**
   * Permet de lancer une commande
   */
  def startNewTask(cmd:String)={
    System.exit(0)
    0
  }
  
  
  /**
   * Kill all process on the pids List
   */
  def killProcess(pids:List[Int]):Unit={
    pids.foreach((pid:Int) => {killProcess(pid)})
  }
  
  /**
   * Kill the process with identifier pid
   */
  def killProcess(pid:Int):Unit={
    
    val lCommande ="kill -9 "+pid
    Console.println(lCommande)
    
    try
    {
      //var rt = Runtime.getRuntime();
	  //rt.exec("kill -9 ");
    }
    catch
    {
      case e:Exception => 
    }
  } 
  /**
   * Quitte l'application
   */
  def exitApp()={
	System.exit(0);
  }
  
  /**
   * Affiche des informations sur l'application
   */
  def aPropos()={
    
  }
  
  /**
   * Lance une requete de recuperation de la liste des processus
   * dans le système, en cours d'exécution
   */
  def getDataSource()={
	mListProcess.clear()
	/**
	 * Ici, ouvrir le repertoir /proc/
	 * pour chaque élément pid de ce repertoire, réaliser
	 * la lecture du fichier /proc/pid/status
	 * créer une instance de ProcessStatus
	 * l'ajouter à la liste.
	 * Ainsi, à la fin de l'exécution de la fonction, 
	 * on est sur que le snapshot demandé est calculé
	 * Il suffit que l'uiUpdater réactualise la vue à l'aide 
	 * de de la source de données mListProcess
	 */
	Utils.DirWalker.starkWalk(mListProcess)
	
  }
  
  
  /**
   * 
   */
  def pickDataSource()={
    mListProcess
  }
  
  /**
   * Demande à la vue de se raffraichir
   */
  def actualiser()={
    
  //Ici parcourir la table ,et inserer les elements de mListProcess
  var i =0
  
  for (i <- mListProcess.length until vues.LinuxProcessExplorerMainView.valuesTable.rowCount){
    
      //vues.LinuxProcessExplorerMainView.valuesTable.model.
  }
  
  for (i <- 0 until mListProcess.length){
     
    
       //compteur = compteur+1
       vues.LinuxProcessExplorerMainView.valuesTable(i,0)="maxds"
   
       vues.LinuxProcessExplorerMainView.valuesTable(i,1)=mListProcess(i).Pid
       vues.LinuxProcessExplorerMainView.valuesTable(i,2)=mListProcess(i).Name
       vues.LinuxProcessExplorerMainView.valuesTable(i,3)=
	       mListProcess(i).VmData/vues.LinuxProcessExplorerMainView.intUnite+" "+vues.LinuxProcessExplorerMainView.strUnite
	   
       
       /*swap*/  
       vues.LinuxProcessExplorerMainView.valuesTable(i,4)=
	   mListProcess(i).VmSwap/vues.LinuxProcessExplorerMainView.intUnite+" "+vues.LinuxProcessExplorerMainView.strUnite
	   
	   /*rss*/   
	   vues.LinuxProcessExplorerMainView.valuesTable(i,5)=
	   mListProcess(i).VmRSS/vues.LinuxProcessExplorerMainView.intUnite+" "+vues.LinuxProcessExplorerMainView.strUnite
   
	   /*exe*/
	   vues.LinuxProcessExplorerMainView.valuesTable(i,6)=
	   mListProcess(i).VmExe/vues.LinuxProcessExplorerMainView.intUnite+" "+vues.LinuxProcessExplorerMainView.strUnite
	   
		       
	   /*stk*/
	   vues.LinuxProcessExplorerMainView.valuesTable(i,7)=
	   mListProcess(i).VmStk/vues.LinuxProcessExplorerMainView.intUnite+" "+vues.LinuxProcessExplorerMainView.strUnite
	   
	   /*peak*/
	   vues.LinuxProcessExplorerMainView.valuesTable(i,8)=
	   mListProcess(i).VmPeak/vues.LinuxProcessExplorerMainView.intUnite+" "+vues.LinuxProcessExplorerMainView.strUnite
	   
	       
	   /**/
	   vues.LinuxProcessExplorerMainView.valuesTable(i,9)=""
	   vues.LinuxProcessExplorerMainView.valuesTable(i,10)=""
	   vues.LinuxProcessExplorerMainView.valuesTable(i,11)=mListProcess(i).Threads
	   vues.LinuxProcessExplorerMainView.valuesTable(i,12)=mListProcess(i).State
	   
			   
	  }
  }
}